<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>IgH EtherCAT Master: ethernet.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">IgH EtherCAT Master
   &#160;<span id="projectnumber">1.5.2</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('ethernet_8c_source.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">ethernet.c</div>  </div>
</div><!--header-->
<div class="contents">
<a href="ethernet_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/******************************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *  $Id: ethernet.c,v ec403cf308eb 2013/02/12 14:46:43 fp $</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *  Copyright (C) 2006-2008  Florian Pose, Ingenieurgemeinschaft IgH</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *  This file is part of the IgH EtherCAT Master.</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *  The IgH EtherCAT Master is free software; you can redistribute it and/or</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *  modify it under the terms of the GNU General Public License version 2, as</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *  published by the Free Software Foundation.</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *  The IgH EtherCAT Master is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *  Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> *  You should have received a copy of the GNU General Public License along</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> *  with the IgH EtherCAT Master; if not, write to the Free Software</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *  ---</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> *  The license mentioned above concerns the source code only. Using the</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *  EtherCAT technology and brand is only permitted in compliance with the</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *  industrial property and similar rights of Beckhoff Automation GmbH.</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#include &lt;linux/version.h&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;linux/netdevice.h&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;linux/etherdevice.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="globals_8h.html">globals.h</a>&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="master_8h.html">master.h</a>&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="slave_8h.html">slave.h</a>&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="mailbox_8h.html">mailbox.h</a>&quot;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ethernet_8h.html">ethernet.h</a>&quot;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a6e67793856d7614e89ecdf6bd55c59de">   56</a></span>&#160;<span class="preprocessor">#define EOE_DEBUG_LEVEL 1</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a70c1d2d995c7441a4f6e24aa46c08939">   60</a></span>&#160;<span class="preprocessor">#define EC_EOE_TX_QUEUE_SIZE 100</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a0e63bd7f607fd32315eef69b1f66835f">   64</a></span>&#160;<span class="preprocessor">#define EC_EOE_TRIES 100</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment">// state functions</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#aeb363618e311593a3ba9162d048b9c4a">ec_eoe_state_rx_check</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a9022acd1ebb43ff1cad0a079f58e1264">ec_eoe_state_rx_fetch</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#ac4a0bc15df72c6d646fbcb9ad9e3d552">ec_eoe_state_tx_sent</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">// net_device functions</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">ec_eoedev_open</a>(<span class="keyword">struct</span> net_device *);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">ec_eoedev_stop</a>(<span class="keyword">struct</span> net_device *);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">ec_eoedev_tx</a>(<span class="keyword">struct</span> sk_buff *, <span class="keyword">struct</span> net_device *);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="keyword">struct </span>net_device_stats *<a class="code" href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">ec_eoedev_stats</a>(<span class="keyword">struct</span> net_device *);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">#if LINUX_VERSION_CODE &gt;= KERNEL_VERSION(2, 6, 29)</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a69c3c873c239f69737af0785814c6665">   88</a></span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>net_device_ops <a class="code" href="ethernet_8c.html#a69c3c873c239f69737af0785814c6665">ec_eoedev_ops</a> = {</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    .ndo_open = <a class="code" href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">ec_eoedev_open</a>,</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    .ndo_stop = <a class="code" href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">ec_eoedev_stop</a>,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    .ndo_start_xmit = <a class="code" href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">ec_eoedev_tx</a>,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    .ndo_get_stats = <a class="code" href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">ec_eoedev_stats</a>,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;};</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="ethernet_8h.html#a890ed81aeeee6742971bae174623f7d9">  104</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a938c671559b99ddc9f09f689457ff2bf">ec_eoe_init</a>(</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe, </div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <a class="code" href="structec__slave.html">ec_slave_t</a> *slave </div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        )</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;{</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <a class="code" href="structec__eoe.html">ec_eoe_t</a> **priv;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordtype">int</span> i, ret = 0;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordtype">char</span> name[<a class="code" href="globals_8h.html#ac67cff75d900b9f1112a4c1a635e495d">EC_DATAGRAM_NAME_SIZE</a>];</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a> = slave;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <a class="code" href="datagram_8c.html#af3dd26022b8780648d2f96ef558f0657">ec_datagram_init</a>(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 0;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">opened</a> = 0;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a> = NULL;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">rx_expected_fragment</a> = 0;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    INIT_LIST_HEAD(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">tx_queue</a>);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a> = NULL;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> = 0;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#acaccde2a704283ace65f59aa1611e7cc">tx_queue_size</a> = <a class="code" href="ethernet_8c.html#a70c1d2d995c7441a4f6e24aa46c08939">EC_EOE_TX_QUEUE_SIZE</a>;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a> = 0;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    sema_init(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>, 1);</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa662995414d6117c623a67d7d3807bfc">tx_frame_number</a> = 0xFF;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    memset(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> net_device_stats));</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a94ade8d6e6250de7d04b86160b83c22c">rx_counter</a> = 0;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aacdbf76b955e5aeb7f1d627a2ca93af5">tx_counter</a> = 0;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a1062493d151d4b2ad4e0392673ad1507">rx_rate</a> = 0;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#abfaa2eb7e9ff799e9872a49819177448">tx_rate</a> = 0;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aaf40c510901fb2cb0765518c2c8ed229">rate_jiffies</a> = 0;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 1;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 1;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="comment">/* device name eoe&lt;MASTER&gt;[as]&lt;SLAVE&gt;, because networking scripts don&#39;t</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment">     * like hyphens etc. in interface names. */</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">if</span> (slave-&gt;<a class="code" href="structec__slave.html#a954d95e8464b5dcb7084463d00760291">effective_alias</a>) {</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        snprintf(name, <a class="code" href="globals_8h.html#ac67cff75d900b9f1112a4c1a635e495d">EC_DATAGRAM_NAME_SIZE</a>,</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                <span class="stringliteral">&quot;eoe%ua%u&quot;</span>, slave-&gt;<a class="code" href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">master</a>-&gt;<a class="code" href="structec__master.html#a78fe13519ced082c9a212711bec49ed3">index</a>, slave-&gt;<a class="code" href="structec__slave.html#a954d95e8464b5dcb7084463d00760291">effective_alias</a>);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        snprintf(name, <a class="code" href="globals_8h.html#ac67cff75d900b9f1112a4c1a635e495d">EC_DATAGRAM_NAME_SIZE</a>,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                <span class="stringliteral">&quot;eoe%us%u&quot;</span>, slave-&gt;<a class="code" href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">master</a>-&gt;<a class="code" href="structec__master.html#a78fe13519ced082c9a212711bec49ed3">index</a>, slave-&gt;<a class="code" href="structec__slave.html#a337a538c53fb9ac8bcfb951fd445e0a1">ring_position</a>);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    snprintf(eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#af2690854e7fb1c410aa37a1ed225836d">name</a>, <a class="code" href="globals_8h.html#ac67cff75d900b9f1112a4c1a635e495d">EC_DATAGRAM_NAME_SIZE</a>, name);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">if</span> (!(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a> = alloc_netdev(<span class="keyword">sizeof</span>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *), name, ether_setup))) {</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <a class="code" href="slave_8h.html#a39519c3172e4196e40fa9006fb801612">EC_SLAVE_ERR</a>(slave, <span class="stringliteral">&quot;Unable to allocate net_device %s&quot;</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                <span class="stringliteral">&quot; for EoE handler!\n&quot;</span>, name);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        ret = -ENODEV;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        <span class="keywordflow">goto</span> out_return;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="comment">// initialize net_device</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="preprocessor">#if LINUX_VERSION_CODE &gt;= KERNEL_VERSION(2, 6, 29)</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;netdev_ops = &amp;<a class="code" href="ethernet_8c.html#a69c3c873c239f69737af0785814c6665">ec_eoedev_ops</a>;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;open = <a class="code" href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">ec_eoedev_open</a>;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;stop = <a class="code" href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">ec_eoedev_stop</a>;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;hard_start_xmit = <a class="code" href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">ec_eoedev_tx</a>;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;get_stats = <a class="code" href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">ec_eoedev_stats</a>;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; ETH_ALEN; i++)</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;dev_addr[i] = i | (i &lt;&lt; 4);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="comment">// initialize private data</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    priv = netdev_priv(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    *priv = eoe;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="comment">// Usually setting the MTU appropriately makes the upper layers</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="comment">// do the frame fragmenting. In some cases this doesn&#39;t work</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="comment">// so the MTU is left on the Ethernet standard value and fragmenting</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="comment">// is done &quot;manually&quot;.</span></div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;mtu = slave-&gt;<a class="code" href="structec__slave.html#a0310afbbf38da2a92cdbe3911a46535c">configured_rx_mailbox_size</a> - ETH_HLEN - 10;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="comment">// connect the net_device to the kernel</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    ret = register_netdev(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">if</span> (ret) {</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        <a class="code" href="slave_8h.html#a39519c3172e4196e40fa9006fb801612">EC_SLAVE_ERR</a>(slave, <span class="stringliteral">&quot;Unable to register net_device:&quot;</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                <span class="stringliteral">&quot; error %i\n&quot;</span>, ret);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <span class="keywordflow">goto</span> out_free;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    }</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="comment">// make the last address octet unique</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;dev_addr[ETH_ALEN - 1] = (uint8_t) eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;ifindex;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; out_free:</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    free_netdev(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a> = NULL;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160; out_return:</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;}</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="ethernet_8h.html#a2d848439972cb4dcc037a2f9bb456715">  208</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a44f532d9502383805937d7843240a0d0">ec_eoe_clear</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;{</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    unregister_netdev(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>); <span class="comment">// possibly calls close callback</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <span class="comment">// empty transmit queue</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <a class="code" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a>(eoe);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>) {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        kfree(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    }</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>)</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    free_netdev(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <a class="code" href="datagram_8c.html#ac4bb8c0e9a5ac20a8d2c31f34a7fc4a9">ec_datagram_clear</a>(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">  232</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <a class="code" href="structec__eoe__frame__t.html">ec_eoe_frame_t</a> *frame, *next;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    down(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    list_for_each_entry_safe(frame, next, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">tx_queue</a>, queue) {</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        list_del(&amp;frame-&gt;<a class="code" href="structec__eoe__frame__t.html#a1c6d064788e29158bd03601b481bcfa5">queue</a>);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        dev_kfree_skb(frame-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>);</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        kfree(frame);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    }</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a> = 0;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    up(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;}</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a634e85c58d58049c893721b7bd27f217">  254</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a634e85c58d58049c893721b7bd27f217">ec_eoe_send</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;{</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keywordtype">size_t</span> remaining_size, current_size, complete_offset;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> last_fragment;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    uint8_t *data;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 3</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    remaining_size = eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;len - eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a>;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keywordflow">if</span> (remaining_size &lt;= eoe-&gt;slave-&gt;configured_tx_mailbox_size - 10) {</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        current_size = remaining_size;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        last_fragment = 1;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        current_size = ((eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#a79ecaa06844f2b8bf2d1b4d9bfae9207">configured_tx_mailbox_size</a> - 10) / 32) * 32;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        last_fragment = 0;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">tx_fragment_number</a>) {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        complete_offset = eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a> / 32;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    }</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="comment">// complete size in 32 bit blocks, rounded up.</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        complete_offset = remaining_size / 32 + 1;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(slave, 0, <span class="stringliteral">&quot;EoE %s TX sending fragment %u%s&quot;</span></div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;            <span class="stringliteral">&quot; with %u octets (%u). %u frames queued.\n&quot;</span>,</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, eoe-&gt;<a class="code" href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">tx_fragment_number</a>,</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;            last_fragment ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;+&quot;</span>, current_size, complete_offset,</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a>);</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 3</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(master, 0, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; current_size; i++) {</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        printk(<span class="stringliteral">&quot;%02X &quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;data[eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a> + i]);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">if</span> ((i + 1) % 16 == 0) {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            printk(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(master, 0, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        }</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    }</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    printk(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    data = <a class="code" href="mailbox_8c.html#aff114bf121b61ff9b310a228de80ca3e">ec_slave_mbox_prepare_send</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>,</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;            0x02, current_size + 4);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordflow">if</span> (IS_ERR(data))</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        <span class="keywordflow">return</span> PTR_ERR(data);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <a class="code" href="group__ApplicationInterface.html#ga42e7df5376954bc1cf1dde11fbf17387">EC_WRITE_U8</a> (data,     0x00); <span class="comment">// eoe fragment req.</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <a class="code" href="group__ApplicationInterface.html#ga42e7df5376954bc1cf1dde11fbf17387">EC_WRITE_U8</a> (data + 1, last_fragment);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <a class="code" href="group__ApplicationInterface.html#gace219530ddd83f5f3f54d5b329b94a3d">EC_WRITE_U16</a>(data + 2, ((eoe-&gt;<a class="code" href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">tx_fragment_number</a> &amp; 0x3F) |</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;                            (complete_offset &amp; 0x3F) &lt;&lt; 6 |</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;                            (eoe-&gt;<a class="code" href="structec__eoe.html#aa662995414d6117c623a67d7d3807bfc">tx_frame_number</a> &amp; 0x0F) &lt;&lt; 12));</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    memcpy(data + 4, eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;data + eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a>, current_size);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 1;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a> += current_size;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">tx_fragment_number</a>++;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;}</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="ethernet_8h.html#ab7ba009185c67570f4c95446cee7eb76">  324</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a236cd1c306b14db3c71ed94e233ee23b">ec_eoe_run</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;{</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keywordflow">if</span> (!eoe-&gt;<a class="code" href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">opened</a>)</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="comment">// if the datagram was not sent, or is not yet received, skip this cycle</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> || eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#a90d55e568be4b8464e9725c105d6c4b0">state</a> == <a class="code" href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720abe88d98e46c97099702211a92e1d8c9d">EC_DATAGRAM_SENT</a>)</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">// call state function</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a>(eoe);</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="comment">// update statistics</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keywordflow">if</span> (jiffies - eoe-&gt;<a class="code" href="structec__eoe.html#aaf40c510901fb2cb0765518c2c8ed229">rate_jiffies</a> &gt; HZ) {</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a1062493d151d4b2ad4e0392673ad1507">rx_rate</a> = eoe-&gt;<a class="code" href="structec__eoe.html#a94ade8d6e6250de7d04b86160b83c22c">rx_counter</a>;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#abfaa2eb7e9ff799e9872a49819177448">tx_rate</a> = eoe-&gt;<a class="code" href="structec__eoe.html#aacdbf76b955e5aeb7f1d627a2ca93af5">tx_counter</a>;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a94ade8d6e6250de7d04b86160b83c22c">rx_counter</a> = 0;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aacdbf76b955e5aeb7f1d627a2ca93af5">tx_counter</a> = 0;</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aaf40c510901fb2cb0765518c2c8ed229">rate_jiffies</a> = jiffies;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    }</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <a class="code" href="datagram_8c.html#a89bbb5e33d0b78760734a3984e4e394f">ec_datagram_output_stats</a>(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;}</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="ethernet_8h.html#a18fc60e72cbbc99eb59a0e43abdfe328">  352</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#aa96fc479a7b625718b2502a201563e44">ec_eoe_queue</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;   <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a>) {</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;       <a class="code" href="master_8c.html#a4ee969becffc63a8ea23b40fcfad75e9">ec_master_queue_datagram_ext</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">master</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;       eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 0;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;   }</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;}</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="ethernet_8h.html#aac0563934b958ac04dc433e8fe442234">  366</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a13b38b2204c153ade2d9c0b942cd49b1">ec_eoe_is_open</a>(<span class="keyword">const</span> <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;{</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keywordflow">return</span> eoe-&gt;<a class="code" href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">opened</a>;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;}</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="ethernet_8h.html#a2c002900d42f291213e271b7196f991e">  378</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#abfb958afb1ae5c90c9753664345b3e59">ec_eoe_is_idle</a>(<span class="keyword">const</span> <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="keywordflow">return</span> eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> &amp;&amp; eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a>;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;}</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="comment">/******************************************************************************</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="comment"> *  STATE PROCESSING FUNCTIONS</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">  394</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;{</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#aef33c89d3974546f5aed153b379d0d24">error_flag</a> ||</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;            !eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">master</a>-&gt;<a class="code" href="structec__master.html#af339cc3b68bceb8ce25b02f4d8b5891b">devices</a>[<a class="code" href="globals_8h.html#ad1a2101422888687598d7e1a630c6343a6cc7c24499003f339df547ab73605f13">EC_DEVICE_MAIN</a>].<a class="code" href="structec__device.html#ab58236227ed28e568e0de571499d5e68">link_state</a>) {</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 1;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 1;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    }</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <a class="code" href="mailbox_8c.html#a950eb8623a9b1b0fc96eb1831d483fa1">ec_slave_mbox_prepare_check</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 1;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#aeb363618e311593a3ba9162d048b9c4a">ec_eoe_state_rx_check</a>;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;}</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="ethernet_8c.html#aeb363618e311593a3ba9162d048b9c4a">  415</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#aeb363618e311593a3ba9162d048b9c4a">ec_eoe_state_rx_check</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;{</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#a90d55e568be4b8464e9725c105d6c4b0">state</a> != <a class="code" href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720a95630d1e98f6217bf0392b4295c5bc6a">EC_DATAGRAM_RECEIVED</a>) {</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_errors++;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Failed to receive mbox&quot;</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                <span class="stringliteral">&quot; check datagram for %s.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    }</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="mailbox_8c.html#af94312f9670053f23ca657e564e196f4">ec_slave_mbox_check</a>(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>)) {</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 1;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    }</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 0;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    <a class="code" href="mailbox_8c.html#ad3ef95e0166428713cd299410a747095">ec_slave_mbox_prepare_fetch</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>);</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 1;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a9022acd1ebb43ff1cad0a079f58e1264">ec_eoe_state_rx_fetch</a>;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;}</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a9022acd1ebb43ff1cad0a079f58e1264">  446</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a9022acd1ebb43ff1cad0a079f58e1264">ec_eoe_state_rx_fetch</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;{</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keywordtype">size_t</span> rec_size, data_size;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    uint8_t *data, frame_type, last_fragment, time_appended, mbox_prot;</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    uint8_t fragment_offset, fragment_number;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    uint8_t frame_number;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    off_t offset;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 3</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#a90d55e568be4b8464e9725c105d6c4b0">state</a> != <a class="code" href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720a95630d1e98f6217bf0392b4295c5bc6a">EC_DATAGRAM_RECEIVED</a>) {</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_errors++;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Failed to receive mbox&quot;</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;                <span class="stringliteral">&quot; fetch datagram for %s.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    }</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    data = <a class="code" href="mailbox_8c.html#a0a7345dc67c23f69cabf29a16aad5802">ec_slave_mbox_fetch</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>,</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;            &amp;mbox_prot, &amp;rec_size);</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="keywordflow">if</span> (IS_ERR(data)) {</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_errors++;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Invalid mailbox response for %s.\n&quot;</span>,</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;                eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    }</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordflow">if</span> (mbox_prot != 0x02) { <span class="comment">// EoE FIXME mailbox handler necessary</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_errors++;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Other mailbox protocol response for %s.\n&quot;</span>,</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;                eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    }</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    frame_type = <a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data) &amp; 0x000F;</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="keywordflow">if</span> (frame_type != 0x00) {</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;%s: Other frame received.&quot;</span></div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                <span class="stringliteral">&quot; Dropping.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_dropped++;</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    }</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <span class="comment">// EoE Fragment Request received</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    last_fragment = (<a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data) &gt;&gt; 8) &amp; 0x0001;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    time_appended = (<a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data) &gt;&gt; 9) &amp; 0x0001;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    fragment_number = <a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data + 2) &amp; 0x003F;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    fragment_offset = (<a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data + 2) &gt;&gt; 6) &amp; 0x003F;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    frame_number = (<a class="code" href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a>(data + 2) &gt;&gt; 12) &amp; 0x000F;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;EoE %s RX fragment %u%s, offset %u,&quot;</span></div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;            <span class="stringliteral">&quot; frame %u%s, %u octets\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, fragment_number,</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;           last_fragment ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;+&quot;</span>, fragment_offset, frame_number,</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;           time_appended ? <span class="stringliteral">&quot;, + timestamp&quot;</span> : <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;           time_appended ? rec_size - 8 : rec_size - 4);</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 3</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <span class="keywordflow">for</span> (i = 0; i &lt; rec_size - 4; i++) {</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;        printk(<span class="stringliteral">&quot;%02X &quot;</span>, data[i + 4]);</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        <span class="keywordflow">if</span> ((i + 1) % 16 == 0) {</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;            printk(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;            <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;        }</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    }</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    printk(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    data_size = time_appended ? rec_size - 8 : rec_size - 4;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keywordflow">if</span> (!fragment_number) {</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>) {</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE RX freeing old socket buffer.\n&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;            dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;        }</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;        <span class="comment">// new socket buffer</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;        <span class="keywordflow">if</span> (!(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a> = dev_alloc_skb(fragment_offset * 32))) {</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;            <span class="keywordflow">if</span> (printk_ratelimit())</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;                <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE RX low on mem,&quot;</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;                        <span class="stringliteral">&quot; frame dropped.\n&quot;</span>);</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_dropped++;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;        }</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a7647dd32da557fbba05bd0dd1153d2a9">rx_skb_offset</a> = 0;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a4ad33f25a05ae6b8664306c8bb12d30d">rx_skb_size</a> = fragment_offset * 32;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">rx_expected_fragment</a> = 0;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    }</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;        <span class="keywordflow">if</span> (!eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>) {</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_dropped++;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        }</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;        offset = fragment_offset * 32;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        <span class="keywordflow">if</span> (offset != eoe-&gt;<a class="code" href="structec__eoe.html#a7647dd32da557fbba05bd0dd1153d2a9">rx_skb_offset</a> ||</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;            offset + data_size &gt; eoe-&gt;<a class="code" href="structec__eoe.html#a4ad33f25a05ae6b8664306c8bb12d30d">rx_skb_size</a> ||</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;            fragment_number != eoe-&gt;<a class="code" href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">rx_expected_fragment</a>) {</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;            dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>);</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a> = NULL;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_errors++;</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Fragmenting error at %s.\n&quot;</span>,</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;                    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;        }</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    }</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    <span class="comment">// copy fragment into socket buffer</span></div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    memcpy(skb_put(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>, data_size), data + 4, data_size);</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a7647dd32da557fbba05bd0dd1153d2a9">rx_skb_offset</a> += data_size;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <span class="keywordflow">if</span> (last_fragment) {</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        <span class="comment">// update statistics</span></div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_packets++;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.rx_bytes += eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;len;</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a94ade8d6e6250de7d04b86160b83c22c">rx_counter</a> += eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;len;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;EoE %s RX frame completed&quot;</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                <span class="stringliteral">&quot; with %u octets.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;len);</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        <span class="comment">// pass socket buffer to network stack</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;dev = eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;protocol = eth_type_trans(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>-&gt;ip_summed = CHECKSUM_UNNECESSARY;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        <span class="keywordflow">if</span> (netif_rx(eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a>)) {</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE RX netif_rx failed.\n&quot;</span>);</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;        }</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">rx_skb</a> = NULL;</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    }</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">rx_expected_fragment</a>++;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;        <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;EoE %s RX expecting fragment %u\n&quot;</span>,</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;               eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, eoe-&gt;<a class="code" href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">rx_expected_fragment</a>);</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    }</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;}</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">  623</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;{</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> wakeup = 0;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#aef33c89d3974546f5aed153b379d0d24">error_flag</a> ||</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;            !eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">master</a>-&gt;<a class="code" href="structec__master.html#af339cc3b68bceb8ce25b02f4d8b5891b">devices</a>[<a class="code" href="globals_8h.html#ad1a2101422888687598d7e1a630c6343a6cc7c24499003f339df547ab73605f13">EC_DEVICE_MAIN</a>].<a class="code" href="structec__device.html#ab58236227ed28e568e0de571499d5e68">link_state</a>) {</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 1;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 1;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    }</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    down(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keywordflow">if</span> (!eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a> || list_empty(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">tx_queue</a>)) {</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        up(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 1;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        <span class="comment">// no data available.</span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        <span class="comment">// start a new receive immediately.</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>(eoe);</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    }</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="comment">// take the first frame out of the queue</span></div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a> = list_entry(eoe-&gt;<a class="code" href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">tx_queue</a>.next, <a class="code" href="structec__eoe__frame__t.html">ec_eoe_frame_t</a>, queue);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    list_del(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a1c6d064788e29158bd03601b481bcfa5">queue</a>);</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <span class="keywordflow">if</span> (!eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> &amp;&amp;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a> == eoe-&gt;<a class="code" href="structec__eoe.html#acaccde2a704283ace65f59aa1611e7cc">tx_queue_size</a> / 2) {</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        netif_wake_queue(eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> = 1;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        wakeup = 1;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    }</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a>--;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    up(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 0;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa662995414d6117c623a67d7d3807bfc">tx_frame_number</a>++;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#aa662995414d6117c623a67d7d3807bfc">tx_frame_number</a> %= 16;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">tx_fragment_number</a> = 0;</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a> = 0;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="ethernet_8c.html#a634e85c58d58049c893721b7bd27f217">ec_eoe_send</a>(eoe)) {</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;        dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        kfree(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a> = NULL;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_errors++;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Send error at %s.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    }</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keywordflow">if</span> (wakeup)</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;EoE %s waking up TX queue...\n&quot;</span>,</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;                eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">tries</a> = <a class="code" href="ethernet_8c.html#a0e63bd7f607fd32315eef69b1f66835f">EC_EOE_TRIES</a>;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#ac4a0bc15df72c6d646fbcb9ad9e3d552">ec_eoe_state_tx_sent</a>;</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;}</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"><a class="line" href="ethernet_8c.html#ac4a0bc15df72c6d646fbcb9ad9e3d552">  698</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="ethernet_8c.html#ac4a0bc15df72c6d646fbcb9ad9e3d552">ec_eoe_state_tx_sent</a>(<a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe )</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;{</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#a90d55e568be4b8464e9725c105d6c4b0">state</a> != <a class="code" href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720a95630d1e98f6217bf0392b4295c5bc6a">EC_DATAGRAM_RECEIVED</a>) {</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">tries</a>) {</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">tries</a>--; <span class="comment">// try again</span></div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 1;</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_errors++;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Failed to receive send&quot;</span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;                    <span class="stringliteral">&quot; datagram for %s after %u tries.\n&quot;</span>,</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;                    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, <a class="code" href="ethernet_8c.html#a0e63bd7f607fd32315eef69b1f66835f">EC_EOE_TRIES</a>);</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;        }</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    }</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">datagram</a>.<a class="code" href="structec__datagram__t.html#a1eeebb1d33d0dbf47498dd78a966977d">working_counter</a> != 1) {</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">tries</a>) {</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">tries</a>--; <span class="comment">// try again</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">queue_datagram</a> = 1;</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_errors++;</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;No sending response&quot;</span></div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;                    <span class="stringliteral">&quot; for %s after %u tries.\n&quot;</span>,</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                    eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, <a class="code" href="ethernet_8c.html#a0e63bd7f607fd32315eef69b1f66835f">EC_EOE_TRIES</a>);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;        }</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    }</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;    <span class="comment">// frame completely sent</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a77e698a64338945f1c57b75771881255">tx_offset</a> &gt;= eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;len) {</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_packets++;</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_bytes += eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;len;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#aacdbf76b955e5aeb7f1d627a2ca93af5">tx_counter</a> += eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>-&gt;len;</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>);</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;        kfree(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a> = NULL;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    }</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="keywordflow">else</span> { <span class="comment">// send next fragment</span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="ethernet_8c.html#a634e85c58d58049c893721b7bd27f217">ec_eoe_send</a>(eoe)) {</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;            dev_kfree_skb(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a>);</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;            kfree(eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a>);</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">tx_frame</a> = NULL;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_errors++;</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 1</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;Send error at %s.\n&quot;</span>, eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name);</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">state</a> = <a class="code" href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a>;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        }</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    }</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;}</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;<span class="comment">/******************************************************************************</span></div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;<span class="comment"> *  NET_DEVICE functions</span></div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;<span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">  764</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">ec_eoedev_open</a>(<span class="keyword">struct</span> net_device *dev )</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;{</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe = *((<a class="code" href="structec__eoe.html">ec_eoe_t</a> **) netdev_priv(dev));</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    <a class="code" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a>(eoe);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">opened</a> = 1;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 0;</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 0;</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    netif_start_queue(dev);</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> = 1;</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;%s opened.\n&quot;</span>, dev-&gt;name);</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <a class="code" href="slave_8c.html#a040121dc73fd21f4a212e59574d17231">ec_slave_request_state</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <a class="code" href="globals_8h.html#a0e9c38c7520909d649fac451046dcde0a321dab0f12d522422d158b8cf64351f8">EC_SLAVE_STATE_OP</a>);</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;}</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"><a class="line" href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">  786</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">ec_eoedev_stop</a>(<span class="keyword">struct</span> net_device *dev )</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;{</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe = *((<a class="code" href="structec__eoe.html">ec_eoe_t</a> **) netdev_priv(dev));</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    netif_stop_queue(dev);</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">rx_idle</a> = 1;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">tx_idle</a> = 1;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> = 0;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">opened</a> = 0;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <a class="code" href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a>(eoe);</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;%s stopped.\n&quot;</span>, dev-&gt;name);</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    <a class="code" href="slave_8c.html#a040121dc73fd21f4a212e59574d17231">ec_slave_request_state</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <a class="code" href="globals_8h.html#a0e9c38c7520909d649fac451046dcde0a1db532f4df475e41ee0613551f7bdc0c">EC_SLAVE_STATE_PREOP</a>);</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;}</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">  808</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">ec_eoedev_tx</a>(<span class="keyword">struct</span> sk_buff *skb, </div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;                 <span class="keyword">struct</span> net_device *dev </div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;                )</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;{</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe = *((<a class="code" href="structec__eoe.html">ec_eoe_t</a> **) netdev_priv(dev));</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    <a class="code" href="structec__eoe__frame__t.html">ec_eoe_frame_t</a> *frame;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="keywordflow">if</span> (skb-&gt;len &gt; eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>-&gt;<a class="code" href="structec__slave.html#a79ecaa06844f2b8bf2d1b4d9bfae9207">configured_tx_mailbox_size</a> - 10) {</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE TX frame (%u octets)&quot;</span></div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;                <span class="stringliteral">&quot; exceeds MTU. dropping.\n&quot;</span>, skb-&gt;len);</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;        dev_kfree_skb(skb);</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>.tx_dropped++;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    }</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    <span class="keywordflow">if</span> (!(frame =</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;          (<a class="code" href="structec__eoe__frame__t.html">ec_eoe_frame_t</a> *) kmalloc(<span class="keyword">sizeof</span>(<a class="code" href="structec__eoe__frame__t.html">ec_eoe_frame_t</a>), GFP_ATOMIC))) {</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;        <span class="keywordflow">if</span> (printk_ratelimit())</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE TX: low on mem. frame dropped.\n&quot;</span>);</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;        <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    }</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    frame-&gt;<a class="code" href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">skb</a> = skb;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    down(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    list_add_tail(&amp;frame-&gt;<a class="code" href="structec__eoe__frame__t.html#a1c6d064788e29158bd03601b481bcfa5">queue</a>, &amp;eoe-&gt;<a class="code" href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">tx_queue</a>);</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a>++;</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    <span class="keywordflow">if</span> (eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a> == eoe-&gt;<a class="code" href="structec__eoe.html#acaccde2a704283ace65f59aa1611e7cc">tx_queue_size</a>) {</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        netif_stop_queue(dev);</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;        eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a> = 0;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    }</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    up(&amp;eoe-&gt;<a class="code" href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">tx_queue_sem</a>);</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;<span class="preprocessor">#if EOE_DEBUG_LEVEL &gt;= 2</span></div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    <a class="code" href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, 0, <span class="stringliteral">&quot;EoE %s TX queued frame&quot;</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;            <span class="stringliteral">&quot; with %u octets (%u frames queued).\n&quot;</span>,</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;            eoe-&gt;<a class="code" href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">dev</a>-&gt;name, skb-&gt;len, eoe-&gt;<a class="code" href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">tx_queued_frames</a>);</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    <span class="keywordflow">if</span> (!eoe-&gt;<a class="code" href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">tx_queue_active</a>)</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;        <a class="code" href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a>(eoe-&gt;<a class="code" href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">slave</a>, <span class="stringliteral">&quot;EoE TX queue is now full.\n&quot;</span>);</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;}</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;</div><div class="line"><a name="l00860"></a><span class="lineno"><a class="line" href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">  860</a></span>&#160;<span class="keyword">struct </span>net_device_stats *<a class="code" href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">ec_eoedev_stats</a>(</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;        <span class="keyword">struct</span> net_device *dev </div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;        )</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;{</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;    <a class="code" href="structec__eoe.html">ec_eoe_t</a> *eoe = *((<a class="code" href="structec__eoe.html">ec_eoe_t</a> **) netdev_priv(dev));</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    <span class="keywordflow">return</span> &amp;eoe-&gt;<a class="code" href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">stats</a>;</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;}</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;<span class="comment">/*****************************************************************************/</span></div><div class="ttc" id="ethernet_8c_html_aa96fc479a7b625718b2502a201563e44"><div class="ttname"><a href="ethernet_8c.html#aa96fc479a7b625718b2502a201563e44">ec_eoe_queue</a></div><div class="ttdeci">void ec_eoe_queue(ec_eoe_t *eoe)</div><div class="ttdoc">Queues the datagram, if necessary. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00352">ethernet.c:352</a></div></div>
<div class="ttc" id="ethernet_8c_html_a1cb83fb1b9325e98a1ad2f6c8b02c9ac"><div class="ttname"><a href="ethernet_8c.html#a1cb83fb1b9325e98a1ad2f6c8b02c9ac">ec_eoedev_tx</a></div><div class="ttdeci">int ec_eoedev_tx(struct sk_buff *, struct net_device *)</div><div class="ttdoc">Transmits data via the virtual network device. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00808">ethernet.c:808</a></div></div>
<div class="ttc" id="mailbox_8c_html_aff114bf121b61ff9b310a228de80ca3e"><div class="ttname"><a href="mailbox_8c.html#aff114bf121b61ff9b310a228de80ca3e">ec_slave_mbox_prepare_send</a></div><div class="ttdeci">uint8_t * ec_slave_mbox_prepare_send(const ec_slave_t *slave, ec_datagram_t *datagram, uint8_t type, size_t size)</div><div class="ttdoc">Prepares a mailbox-send datagram. </div><div class="ttdef"><b>Definition:</b> <a href="mailbox_8c_source.html#l00051">mailbox.c:51</a></div></div>
<div class="ttc" id="structec__slave_html_a337a538c53fb9ac8bcfb951fd445e0a1"><div class="ttname"><a href="structec__slave.html#a337a538c53fb9ac8bcfb951fd445e0a1">ec_slave::ring_position</a></div><div class="ttdeci">uint16_t ring_position</div><div class="ttdoc">Ring position. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00183">slave.h:183</a></div></div>
<div class="ttc" id="globals_8h_html_ac67cff75d900b9f1112a4c1a635e495d"><div class="ttname"><a href="globals_8h.html#ac67cff75d900b9f1112a4c1a635e495d">EC_DATAGRAM_NAME_SIZE</a></div><div class="ttdeci">#define EC_DATAGRAM_NAME_SIZE</div><div class="ttdoc">Size of the datagram description string. </div><div class="ttdef"><b>Definition:</b> <a href="globals_8h_source.html#l00116">globals.h:116</a></div></div>
<div class="ttc" id="structec__eoe__frame__t_html"><div class="ttname"><a href="structec__eoe__frame__t.html">ec_eoe_frame_t</a></div><div class="ttdoc">Queued frame structure. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00059">ethernet.h:59</a></div></div>
<div class="ttc" id="structec__eoe_html_aacdbf76b955e5aeb7f1d627a2ca93af5"><div class="ttname"><a href="structec__eoe.html#aacdbf76b955e5aeb7f1d627a2ca93af5">ec_eoe::tx_counter</a></div><div class="ttdeci">uint32_t tx_counter</div><div class="ttdoc">octets transmitted during last second </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00105">ethernet.h:105</a></div></div>
<div class="ttc" id="ethernet_8c_html_a70c1d2d995c7441a4f6e24aa46c08939"><div class="ttname"><a href="ethernet_8c.html#a70c1d2d995c7441a4f6e24aa46c08939">EC_EOE_TX_QUEUE_SIZE</a></div><div class="ttdeci">#define EC_EOE_TX_QUEUE_SIZE</div><div class="ttdoc">Size of the EoE tx queue. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00060">ethernet.c:60</a></div></div>
<div class="ttc" id="mailbox_8c_html_a0a7345dc67c23f69cabf29a16aad5802"><div class="ttname"><a href="mailbox_8c.html#a0a7345dc67c23f69cabf29a16aad5802">ec_slave_mbox_fetch</a></div><div class="ttdeci">uint8_t * ec_slave_mbox_fetch(const ec_slave_t *slave, const ec_datagram_t *datagram, uint8_t *type, size_t *size)</div><div class="ttdoc">Processes received mailbox data. </div><div class="ttdef"><b>Definition:</b> <a href="mailbox_8c_source.html#l00165">mailbox.c:165</a></div></div>
<div class="ttc" id="ethernet_8c_html_a69c3c873c239f69737af0785814c6665"><div class="ttname"><a href="ethernet_8c.html#a69c3c873c239f69737af0785814c6665">ec_eoedev_ops</a></div><div class="ttdeci">static const struct net_device_ops ec_eoedev_ops</div><div class="ttdoc">Device operations for EoE interfaces. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00088">ethernet.c:88</a></div></div>
<div class="ttc" id="structec__eoe__frame__t_html_a373ee9510d98da5da3077944d5d074cb"><div class="ttname"><a href="structec__eoe__frame__t.html#a373ee9510d98da5da3077944d5d074cb">ec_eoe_frame_t::skb</a></div><div class="ttdeci">struct sk_buff * skb</div><div class="ttdoc">socket buffer </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00062">ethernet.h:62</a></div></div>
<div class="ttc" id="structec__slave_html_a79ecaa06844f2b8bf2d1b4d9bfae9207"><div class="ttname"><a href="structec__slave.html#a79ecaa06844f2b8bf2d1b4d9bfae9207">ec_slave::configured_tx_mailbox_size</a></div><div class="ttdeci">uint16_t configured_tx_mailbox_size</div><div class="ttdoc">Configured send mailbox size. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00201">slave.h:201</a></div></div>
<div class="ttc" id="ethernet_8c_html_a9022acd1ebb43ff1cad0a079f58e1264"><div class="ttname"><a href="ethernet_8c.html#a9022acd1ebb43ff1cad0a079f58e1264">ec_eoe_state_rx_fetch</a></div><div class="ttdeci">void ec_eoe_state_rx_fetch(ec_eoe_t *)</div><div class="ttdoc">State: RX_FETCH. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00446">ethernet.c:446</a></div></div>
<div class="ttc" id="structec__eoe_html_afd6bcfa6f1ad2bfb371439776b2ca8a9"><div class="ttname"><a href="structec__eoe.html#afd6bcfa6f1ad2bfb371439776b2ca8a9">ec_eoe::tx_queue</a></div><div class="ttdeci">struct list_head tx_queue</div><div class="ttdoc">queue for frames to send </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00096">ethernet.h:96</a></div></div>
<div class="ttc" id="slave_8h_html_a349fb5dcd0bac7fc2324d3da89aa4751"><div class="ttname"><a href="slave_8h.html#a349fb5dcd0bac7fc2324d3da89aa4751">EC_SLAVE_DBG</a></div><div class="ttdeci">#define EC_SLAVE_DBG(slave, level, fmt, args...)</div><div class="ttdoc">Convenience macro for printing slave-specific debug messages to syslog. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00106">slave.h:106</a></div></div>
<div class="ttc" id="structec__eoe_html_a3ee417a7b394d57b0ba1e7513e24f8b6"><div class="ttname"><a href="structec__eoe.html#a3ee417a7b394d57b0ba1e7513e24f8b6">ec_eoe::tx_fragment_number</a></div><div class="ttdeci">uint8_t tx_fragment_number</div><div class="ttdoc">number of the fragment </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00103">ethernet.h:103</a></div></div>
<div class="ttc" id="ethernet_8c_html_a634e85c58d58049c893721b7bd27f217"><div class="ttname"><a href="ethernet_8c.html#a634e85c58d58049c893721b7bd27f217">ec_eoe_send</a></div><div class="ttdeci">int ec_eoe_send(ec_eoe_t *eoe)</div><div class="ttdoc">Sends a frame or the next fragment. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00254">ethernet.c:254</a></div></div>
<div class="ttc" id="structec__eoe_html_a4a07acce0d52dfec65250bb9e8152976"><div class="ttname"><a href="structec__eoe.html#a4a07acce0d52dfec65250bb9e8152976">ec_eoe::slave</a></div><div class="ttdeci">ec_slave_t * slave</div><div class="ttdoc">pointer to the corresponding slave </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00079">ethernet.h:79</a></div></div>
<div class="ttc" id="master_8c_html_a4ee969becffc63a8ea23b40fcfad75e9"><div class="ttname"><a href="master_8c.html#a4ee969becffc63a8ea23b40fcfad75e9">ec_master_queue_datagram_ext</a></div><div class="ttdeci">void ec_master_queue_datagram_ext(ec_master_t *master, ec_datagram_t *datagram)</div><div class="ttdoc">Places a datagram in the non-application datagram queue. </div><div class="ttdef"><b>Definition:</b> <a href="master_8c_source.html#l00957">master.c:957</a></div></div>
<div class="ttc" id="globals_8h_html_a0e9c38c7520909d649fac451046dcde0a321dab0f12d522422d158b8cf64351f8"><div class="ttname"><a href="globals_8h.html#a0e9c38c7520909d649fac451046dcde0a321dab0f12d522422d158b8cf64351f8">EC_SLAVE_STATE_OP</a></div><div class="ttdoc">OP (mailbox communication and input/output update) </div><div class="ttdef"><b>Definition:</b> <a href="globals_8h_source.html#l00138">globals.h:138</a></div></div>
<div class="ttc" id="structec__eoe_html_acaccde2a704283ace65f59aa1611e7cc"><div class="ttname"><a href="structec__eoe.html#acaccde2a704283ace65f59aa1611e7cc">ec_eoe::tx_queue_size</a></div><div class="ttdeci">unsigned int tx_queue_size</div><div class="ttdoc">Transmit queue size. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00097">ethernet.h:97</a></div></div>
<div class="ttc" id="structec__eoe_html_a4ad33f25a05ae6b8664306c8bb12d30d"><div class="ttname"><a href="structec__eoe.html#a4ad33f25a05ae6b8664306c8bb12d30d">ec_eoe::rx_skb_size</a></div><div class="ttdeci">size_t rx_skb_size</div><div class="ttdoc">size of the allocated socket buffer memory </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00090">ethernet.h:90</a></div></div>
<div class="ttc" id="structec__eoe_html_a77e698a64338945f1c57b75771881255"><div class="ttname"><a href="structec__eoe.html#a77e698a64338945f1c57b75771881255">ec_eoe::tx_offset</a></div><div class="ttdeci">size_t tx_offset</div><div class="ttdoc">number of octets sent </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00104">ethernet.h:104</a></div></div>
<div class="ttc" id="slave_8h_html"><div class="ttname"><a href="slave_8h.html">slave.h</a></div><div class="ttdoc">EtherCAT slave structure. </div></div>
<div class="ttc" id="mailbox_8c_html_ad3ef95e0166428713cd299410a747095"><div class="ttname"><a href="mailbox_8c.html#ad3ef95e0166428713cd299410a747095">ec_slave_mbox_prepare_fetch</a></div><div class="ttdeci">int ec_slave_mbox_prepare_fetch(const ec_slave_t *slave, ec_datagram_t *datagram)</div><div class="ttdoc">Prepares a datagram to fetch mailbox data. </div><div class="ttdef"><b>Definition:</b> <a href="mailbox_8c_source.html#l00127">mailbox.c:127</a></div></div>
<div class="ttc" id="ethernet_8c_html_a4b1876fbf6c3be4f5b8e432207b2b5e5"><div class="ttname"><a href="ethernet_8c.html#a4b1876fbf6c3be4f5b8e432207b2b5e5">ec_eoe_state_tx_start</a></div><div class="ttdeci">void ec_eoe_state_tx_start(ec_eoe_t *)</div><div class="ttdoc">State: TX START. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00623">ethernet.c:623</a></div></div>
<div class="ttc" id="slave_8h_html_aae2995e6509df66255d8f7fcdb5eb5bb"><div class="ttname"><a href="slave_8h.html#aae2995e6509df66255d8f7fcdb5eb5bb">EC_SLAVE_WARN</a></div><div class="ttdeci">#define EC_SLAVE_WARN(slave, fmt, args...)</div><div class="ttdoc">Convenience macro for printing slave-specific warnings to syslog. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00090">slave.h:90</a></div></div>
<div class="ttc" id="group__ApplicationInterface_html_ga42e7df5376954bc1cf1dde11fbf17387"><div class="ttname"><a href="group__ApplicationInterface.html#ga42e7df5376954bc1cf1dde11fbf17387">EC_WRITE_U8</a></div><div class="ttdeci">#define EC_WRITE_U8(DATA, VAL)</div><div class="ttdoc">Write an 8-bit unsigned value to EtherCAT data. </div><div class="ttdef"><b>Definition:</b> <a href="ecrt_8h_source.html#l02187">ecrt.h:2187</a></div></div>
<div class="ttc" id="ethernet_8c_html_aeb363618e311593a3ba9162d048b9c4a"><div class="ttname"><a href="ethernet_8c.html#aeb363618e311593a3ba9162d048b9c4a">ec_eoe_state_rx_check</a></div><div class="ttdeci">void ec_eoe_state_rx_check(ec_eoe_t *)</div><div class="ttdoc">State: RX_CHECK. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00415">ethernet.c:415</a></div></div>
<div class="ttc" id="structec__eoe_html_a167ab3458420a60abec520dd0c73e5d5"><div class="ttname"><a href="structec__eoe.html#a167ab3458420a60abec520dd0c73e5d5">ec_eoe::tx_queue_active</a></div><div class="ttdeci">unsigned int tx_queue_active</div><div class="ttdoc">kernel netif queue started </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00098">ethernet.h:98</a></div></div>
<div class="ttc" id="structec__datagram__t_html_af2690854e7fb1c410aa37a1ed225836d"><div class="ttname"><a href="structec__datagram__t.html#af2690854e7fb1c410aa37a1ed225836d">ec_datagram_t::name</a></div><div class="ttdeci">char name[EC_DATAGRAM_NAME_SIZE]</div><div class="ttdoc">Description of the datagram. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8h_source.html#l00112">datagram.h:112</a></div></div>
<div class="ttc" id="structec__datagram__t_html_a1eeebb1d33d0dbf47498dd78a966977d"><div class="ttname"><a href="structec__datagram__t.html#a1eeebb1d33d0dbf47498dd78a966977d">ec_datagram_t::working_counter</a></div><div class="ttdeci">uint16_t working_counter</div><div class="ttdoc">Working counter. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8h_source.html#l00099">datagram.h:99</a></div></div>
<div class="ttc" id="ethernet_8c_html_a938c671559b99ddc9f09f689457ff2bf"><div class="ttname"><a href="ethernet_8c.html#a938c671559b99ddc9f09f689457ff2bf">ec_eoe_init</a></div><div class="ttdeci">int ec_eoe_init(ec_eoe_t *eoe, ec_slave_t *slave)</div><div class="ttdoc">EoE constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00104">ethernet.c:104</a></div></div>
<div class="ttc" id="structec__device_html_ab58236227ed28e568e0de571499d5e68"><div class="ttname"><a href="structec__device.html#ab58236227ed28e568e0de571499d5e68">ec_device::link_state</a></div><div class="ttdeci">uint8_t link_state</div><div class="ttdoc">device link state </div><div class="ttdef"><b>Definition:</b> <a href="device_8h_source.html#l00088">device.h:88</a></div></div>
<div class="ttc" id="ethernet_8c_html_a0e63bd7f607fd32315eef69b1f66835f"><div class="ttname"><a href="ethernet_8c.html#a0e63bd7f607fd32315eef69b1f66835f">EC_EOE_TRIES</a></div><div class="ttdeci">#define EC_EOE_TRIES</div><div class="ttdoc">Number of tries. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00064">ethernet.c:64</a></div></div>
<div class="ttc" id="datagram_8h_html_ac9882419ec1404dcca75761c4d1ce720abe88d98e46c97099702211a92e1d8c9d"><div class="ttname"><a href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720abe88d98e46c97099702211a92e1d8c9d">EC_DATAGRAM_SENT</a></div><div class="ttdoc">Sent (still in the queue). </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8h_source.html#l00077">datagram.h:77</a></div></div>
<div class="ttc" id="ethernet_8c_html_a970fad1d21f02be260525eecca75dfea"><div class="ttname"><a href="ethernet_8c.html#a970fad1d21f02be260525eecca75dfea">ec_eoe_flush</a></div><div class="ttdeci">void ec_eoe_flush(ec_eoe_t *)</div><div class="ttdoc">Empties the transmit queue. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00232">ethernet.c:232</a></div></div>
<div class="ttc" id="structec__eoe_html_abfaa2eb7e9ff799e9872a49819177448"><div class="ttname"><a href="structec__eoe.html#abfaa2eb7e9ff799e9872a49819177448">ec_eoe::tx_rate</a></div><div class="ttdeci">uint32_t tx_rate</div><div class="ttdoc">transmit rate (bps) </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00106">ethernet.h:106</a></div></div>
<div class="ttc" id="datagram_8c_html_a89bbb5e33d0b78760734a3984e4e394f"><div class="ttname"><a href="datagram_8c.html#a89bbb5e33d0b78760734a3984e4e394f">ec_datagram_output_stats</a></div><div class="ttdeci">void ec_datagram_output_stats(ec_datagram_t *datagram)</div><div class="ttdoc">Outputs datagram statistics at most every second. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8c_source.html#l00619">datagram.c:619</a></div></div>
<div class="ttc" id="globals_8h_html"><div class="ttname"><a href="globals_8h.html">globals.h</a></div><div class="ttdoc">Global definitions and macros. </div></div>
<div class="ttc" id="structec__eoe_html_a88d376026ca84277ec5fa85c31ab1c17"><div class="ttname"><a href="structec__eoe.html#a88d376026ca84277ec5fa85c31ab1c17">ec_eoe::rx_expected_fragment</a></div><div class="ttdeci">uint8_t rx_expected_fragment</div><div class="ttdoc">next expected fragment number </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00091">ethernet.h:91</a></div></div>
<div class="ttc" id="master_8h_html"><div class="ttname"><a href="master_8h.html">master.h</a></div><div class="ttdoc">EtherCAT master structure. </div></div>
<div class="ttc" id="ethernet_8c_html_a0c3f0cfe4de9ea263299cca79a514fe2"><div class="ttname"><a href="ethernet_8c.html#a0c3f0cfe4de9ea263299cca79a514fe2">ec_eoe_state_rx_start</a></div><div class="ttdeci">void ec_eoe_state_rx_start(ec_eoe_t *)</div><div class="ttdoc">State: RX_START. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00394">ethernet.c:394</a></div></div>
<div class="ttc" id="structec__slave_html"><div class="ttname"><a href="structec__slave.html">ec_slave</a></div><div class="ttdoc">EtherCAT slave. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00176">slave.h:176</a></div></div>
<div class="ttc" id="ethernet_8h_html"><div class="ttname"><a href="ethernet_8h.html">ethernet.h</a></div><div class="ttdoc">Ethernet over EtherCAT (EoE) </div></div>
<div class="ttc" id="structec__datagram__t_html_a90d55e568be4b8464e9725c105d6c4b0"><div class="ttname"><a href="structec__datagram__t.html#a90d55e568be4b8464e9725c105d6c4b0">ec_datagram_t::state</a></div><div class="ttdeci">ec_datagram_state_t state</div><div class="ttdoc">State. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8h_source.html#l00100">datagram.h:100</a></div></div>
<div class="ttc" id="ethernet_8c_html_abfb958afb1ae5c90c9753664345b3e59"><div class="ttname"><a href="ethernet_8c.html#abfb958afb1ae5c90c9753664345b3e59">ec_eoe_is_idle</a></div><div class="ttdeci">int ec_eoe_is_idle(const ec_eoe_t *eoe)</div><div class="ttdoc">Returns the idle state. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00378">ethernet.c:378</a></div></div>
<div class="ttc" id="slave_8h_html_a39519c3172e4196e40fa9006fb801612"><div class="ttname"><a href="slave_8h.html#a39519c3172e4196e40fa9006fb801612">EC_SLAVE_ERR</a></div><div class="ttdeci">#define EC_SLAVE_ERR(slave, fmt, args...)</div><div class="ttdoc">Convenience macro for printing slave-specific errors to syslog. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00076">slave.h:76</a></div></div>
<div class="ttc" id="structec__eoe_html_aaf40c510901fb2cb0765518c2c8ed229"><div class="ttname"><a href="structec__eoe.html#aaf40c510901fb2cb0765518c2c8ed229">ec_eoe::rate_jiffies</a></div><div class="ttdeci">unsigned long rate_jiffies</div><div class="ttdoc">time of last rate output </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00086">ethernet.h:86</a></div></div>
<div class="ttc" id="group__ApplicationInterface_html_gace219530ddd83f5f3f54d5b329b94a3d"><div class="ttname"><a href="group__ApplicationInterface.html#gace219530ddd83f5f3f54d5b329b94a3d">EC_WRITE_U16</a></div><div class="ttdeci">#define EC_WRITE_U16(DATA, VAL)</div><div class="ttdoc">Write a 16-bit unsigned value to EtherCAT data. </div><div class="ttdef"><b>Definition:</b> <a href="ecrt_8h_source.html#l02204">ecrt.h:2204</a></div></div>
<div class="ttc" id="globals_8h_html_ad1a2101422888687598d7e1a630c6343a6cc7c24499003f339df547ab73605f13"><div class="ttname"><a href="globals_8h.html#ad1a2101422888687598d7e1a630c6343a6cc7c24499003f339df547ab73605f13">EC_DEVICE_MAIN</a></div><div class="ttdoc">Main device. </div><div class="ttdef"><b>Definition:</b> <a href="globals_8h_source.html#l00202">globals.h:202</a></div></div>
<div class="ttc" id="structec__slave_html_ae3ca485627d212610814bf4e0130eddd"><div class="ttname"><a href="structec__slave.html#ae3ca485627d212610814bf4e0130eddd">ec_slave::master</a></div><div class="ttdeci">ec_master_t * master</div><div class="ttdoc">Master owning the slave. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00178">slave.h:178</a></div></div>
<div class="ttc" id="structec__eoe__frame__t_html_a1c6d064788e29158bd03601b481bcfa5"><div class="ttname"><a href="structec__eoe__frame__t.html#a1c6d064788e29158bd03601b481bcfa5">ec_eoe_frame_t::queue</a></div><div class="ttdeci">struct list_head queue</div><div class="ttdoc">list item </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00061">ethernet.h:61</a></div></div>
<div class="ttc" id="ethernet_8c_html_ac4a0bc15df72c6d646fbcb9ad9e3d552"><div class="ttname"><a href="ethernet_8c.html#ac4a0bc15df72c6d646fbcb9ad9e3d552">ec_eoe_state_tx_sent</a></div><div class="ttdeci">void ec_eoe_state_tx_sent(ec_eoe_t *)</div><div class="ttdoc">State: TX SENT. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00698">ethernet.c:698</a></div></div>
<div class="ttc" id="structec__eoe_html_a174f57afa262c3a4b21b1e86268442f0"><div class="ttname"><a href="structec__eoe.html#a174f57afa262c3a4b21b1e86268442f0">ec_eoe::opened</a></div><div class="ttdeci">unsigned int opened</div><div class="ttdoc">net_device is opened </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00085">ethernet.h:85</a></div></div>
<div class="ttc" id="structec__eoe_html_a7647dd32da557fbba05bd0dd1153d2a9"><div class="ttname"><a href="structec__eoe.html#a7647dd32da557fbba05bd0dd1153d2a9">ec_eoe::rx_skb_offset</a></div><div class="ttdeci">off_t rx_skb_offset</div><div class="ttdoc">current write pointer in the socket buffer </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00089">ethernet.h:89</a></div></div>
<div class="ttc" id="structec__eoe_html_a58a38a4520677a172eb12ed44d230502"><div class="ttname"><a href="structec__eoe.html#a58a38a4520677a172eb12ed44d230502">ec_eoe::datagram</a></div><div class="ttdeci">ec_datagram_t datagram</div><div class="ttdoc">datagram </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00080">ethernet.h:80</a></div></div>
<div class="ttc" id="structec__eoe_html_a859cf84e58d4407062e2d96c5b44a480"><div class="ttname"><a href="structec__eoe.html#a859cf84e58d4407062e2d96c5b44a480">ec_eoe::stats</a></div><div class="ttdeci">struct net_device_stats stats</div><div class="ttdoc">device statistics </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00084">ethernet.h:84</a></div></div>
<div class="ttc" id="structec__slave_html_a954d95e8464b5dcb7084463d00760291"><div class="ttname"><a href="structec__slave.html#a954d95e8464b5dcb7084463d00760291">ec_slave::effective_alias</a></div><div class="ttdeci">uint16_t effective_alias</div><div class="ttdoc">Effective alias address. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00185">slave.h:185</a></div></div>
<div class="ttc" id="mailbox_8c_html_a950eb8623a9b1b0fc96eb1831d483fa1"><div class="ttname"><a href="mailbox_8c.html#a950eb8623a9b1b0fc96eb1831d483fa1">ec_slave_mbox_prepare_check</a></div><div class="ttdeci">int ec_slave_mbox_prepare_check(const ec_slave_t *slave, ec_datagram_t *datagram)</div><div class="ttdoc">Prepares a datagram for checking the mailbox state. </div><div class="ttdef"><b>Definition:</b> <a href="mailbox_8c_source.html#l00096">mailbox.c:96</a></div></div>
<div class="ttc" id="structec__eoe_html_a4f62dfcc5d7d43780af3e2520e66ab74"><div class="ttname"><a href="structec__eoe.html#a4f62dfcc5d7d43780af3e2520e66ab74">ec_eoe::tx_idle</a></div><div class="ttdeci">unsigned int tx_idle</div><div class="ttdoc">Idle flag. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00107">ethernet.h:107</a></div></div>
<div class="ttc" id="group__ApplicationInterface_html_gaa78148947379983986940d1980ac3db1"><div class="ttname"><a href="group__ApplicationInterface.html#gaa78148947379983986940d1980ac3db1">EC_READ_U16</a></div><div class="ttdeci">#define EC_READ_U16(DATA)</div><div class="ttdoc">Read a 16-bit unsigned value from EtherCAT data. </div><div class="ttdef"><b>Definition:</b> <a href="ecrt_8h_source.html#l02135">ecrt.h:2135</a></div></div>
<div class="ttc" id="structec__eoe_html_a1062493d151d4b2ad4e0392673ad1507"><div class="ttname"><a href="structec__eoe.html#a1062493d151d4b2ad4e0392673ad1507">ec_eoe::rx_rate</a></div><div class="ttdeci">uint32_t rx_rate</div><div class="ttdoc">receive rate (bps) </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00093">ethernet.h:93</a></div></div>
<div class="ttc" id="mailbox_8h_html"><div class="ttname"><a href="mailbox_8h.html">mailbox.h</a></div><div class="ttdoc">Mailbox functionality. </div></div>
<div class="ttc" id="structec__eoe_html_aaed9dafdc5f3ae99a04e3941408e9e00"><div class="ttname"><a href="structec__eoe.html#aaed9dafdc5f3ae99a04e3941408e9e00">ec_eoe::rx_skb</a></div><div class="ttdeci">struct sk_buff * rx_skb</div><div class="ttdoc">current rx socket buffer </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00088">ethernet.h:88</a></div></div>
<div class="ttc" id="structec__eoe_html_a2dae5cf48641f38edad80223dd93621c"><div class="ttname"><a href="structec__eoe.html#a2dae5cf48641f38edad80223dd93621c">ec_eoe::state</a></div><div class="ttdeci">void(* state)(ec_eoe_t *)</div><div class="ttdoc">state function for the state machine </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00082">ethernet.h:82</a></div></div>
<div class="ttc" id="datagram_8c_html_af3dd26022b8780648d2f96ef558f0657"><div class="ttname"><a href="datagram_8c.html#af3dd26022b8780648d2f96ef558f0657">ec_datagram_init</a></div><div class="ttdeci">void ec_datagram_init(ec_datagram_t *datagram)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8c_source.html#l00088">datagram.c:88</a></div></div>
<div class="ttc" id="structec__eoe_html_aa662995414d6117c623a67d7d3807bfc"><div class="ttname"><a href="structec__eoe.html#aa662995414d6117c623a67d7d3807bfc">ec_eoe::tx_frame_number</a></div><div class="ttdeci">uint8_t tx_frame_number</div><div class="ttdoc">number of the transmitted frame </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00102">ethernet.h:102</a></div></div>
<div class="ttc" id="structec__eoe_html_a94ade8d6e6250de7d04b86160b83c22c"><div class="ttname"><a href="structec__eoe.html#a94ade8d6e6250de7d04b86160b83c22c">ec_eoe::rx_counter</a></div><div class="ttdeci">uint32_t rx_counter</div><div class="ttdoc">octets received during last second </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00092">ethernet.h:92</a></div></div>
<div class="ttc" id="slave_8c_html_a040121dc73fd21f4a212e59574d17231"><div class="ttname"><a href="slave_8c.html#a040121dc73fd21f4a212e59574d17231">ec_slave_request_state</a></div><div class="ttdeci">void ec_slave_request_state(ec_slave_t *slave, ec_slave_state_t state)</div><div class="ttdoc">Request a slave state and resets the error flag. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8c_source.html#l00296">slave.c:296</a></div></div>
<div class="ttc" id="structec__slave_html_a0310afbbf38da2a92cdbe3911a46535c"><div class="ttname"><a href="structec__slave.html#a0310afbbf38da2a92cdbe3911a46535c">ec_slave::configured_rx_mailbox_size</a></div><div class="ttdeci">uint16_t configured_rx_mailbox_size</div><div class="ttdoc">Configured receive mailbox size. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00197">slave.h:197</a></div></div>
<div class="ttc" id="ethernet_8c_html_a6d276523f5d753ec334b8b8e8f21d7e9"><div class="ttname"><a href="ethernet_8c.html#a6d276523f5d753ec334b8b8e8f21d7e9">ec_eoedev_open</a></div><div class="ttdeci">int ec_eoedev_open(struct net_device *)</div><div class="ttdoc">Opens the virtual network device. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00764">ethernet.c:764</a></div></div>
<div class="ttc" id="structec__eoe_html_a53d2194eaa281eeaf4d101443b4117a6"><div class="ttname"><a href="structec__eoe.html#a53d2194eaa281eeaf4d101443b4117a6">ec_eoe::tx_queue_sem</a></div><div class="ttdeci">struct semaphore tx_queue_sem</div><div class="ttdoc">Semaphore for the send queue. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00100">ethernet.h:100</a></div></div>
<div class="ttc" id="structec__eoe_html_a5f814555b215fa648246d3e4b8952db4"><div class="ttname"><a href="structec__eoe.html#a5f814555b215fa648246d3e4b8952db4">ec_eoe::tx_frame</a></div><div class="ttdeci">ec_eoe_frame_t * tx_frame</div><div class="ttdoc">current TX frame </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00101">ethernet.h:101</a></div></div>
<div class="ttc" id="structec__eoe_html_a94fc1a4085026439575dee3432a8613d"><div class="ttname"><a href="structec__eoe.html#a94fc1a4085026439575dee3432a8613d">ec_eoe::tries</a></div><div class="ttdeci">unsigned int tries</div><div class="ttdoc">Tries. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00109">ethernet.h:109</a></div></div>
<div class="ttc" id="ethernet_8c_html_a236cd1c306b14db3c71ed94e233ee23b"><div class="ttname"><a href="ethernet_8c.html#a236cd1c306b14db3c71ed94e233ee23b">ec_eoe_run</a></div><div class="ttdeci">void ec_eoe_run(ec_eoe_t *eoe)</div><div class="ttdoc">Runs the EoE state machine. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00324">ethernet.c:324</a></div></div>
<div class="ttc" id="ethernet_8c_html_aead802b75eda8893b75fe909bf5250d3"><div class="ttname"><a href="ethernet_8c.html#aead802b75eda8893b75fe909bf5250d3">ec_eoedev_stop</a></div><div class="ttdeci">int ec_eoedev_stop(struct net_device *)</div><div class="ttdoc">Stops the virtual network device. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00786">ethernet.c:786</a></div></div>
<div class="ttc" id="ethernet_8c_html_a44f532d9502383805937d7843240a0d0"><div class="ttname"><a href="ethernet_8c.html#a44f532d9502383805937d7843240a0d0">ec_eoe_clear</a></div><div class="ttdeci">void ec_eoe_clear(ec_eoe_t *eoe)</div><div class="ttdoc">EoE destructor. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00208">ethernet.c:208</a></div></div>
<div class="ttc" id="structec__master_html_a78fe13519ced082c9a212711bec49ed3"><div class="ttname"><a href="structec__master.html#a78fe13519ced082c9a212711bec49ed3">ec_master::index</a></div><div class="ttdeci">unsigned int index</div><div class="ttdoc">Index. </div><div class="ttdef"><b>Definition:</b> <a href="master_8h_source.html#l00195">master.h:195</a></div></div>
<div class="ttc" id="globals_8h_html_a0e9c38c7520909d649fac451046dcde0a1db532f4df475e41ee0613551f7bdc0c"><div class="ttname"><a href="globals_8h.html#a0e9c38c7520909d649fac451046dcde0a1db532f4df475e41ee0613551f7bdc0c">EC_SLAVE_STATE_PREOP</a></div><div class="ttdoc">PREOP state (mailbox communication, no IO) </div><div class="ttdef"><b>Definition:</b> <a href="globals_8h_source.html#l00132">globals.h:132</a></div></div>
<div class="ttc" id="datagram_8h_html_ac9882419ec1404dcca75761c4d1ce720a95630d1e98f6217bf0392b4295c5bc6a"><div class="ttname"><a href="datagram_8h.html#ac9882419ec1404dcca75761c4d1ce720a95630d1e98f6217bf0392b4295c5bc6a">EC_DATAGRAM_RECEIVED</a></div><div class="ttdoc">Received (dequeued). </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8h_source.html#l00078">datagram.h:78</a></div></div>
<div class="ttc" id="structec__eoe_html"><div class="ttname"><a href="structec__eoe.html">ec_eoe</a></div><div class="ttdoc">Ethernet over EtherCAT (EoE) handler. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00076">ethernet.h:76</a></div></div>
<div class="ttc" id="structec__slave_html_aef33c89d3974546f5aed153b379d0d24"><div class="ttname"><a href="structec__slave.html#aef33c89d3974546f5aed153b379d0d24">ec_slave::error_flag</a></div><div class="ttdeci">unsigned int error_flag</div><div class="ttdoc">Stop processing after an error. </div><div class="ttdef"><b>Definition:</b> <a href="slave_8h_source.html#l00193">slave.h:193</a></div></div>
<div class="ttc" id="structec__eoe_html_ad0775c67897e6c38beb0b656e8732d05"><div class="ttname"><a href="structec__eoe.html#ad0775c67897e6c38beb0b656e8732d05">ec_eoe::rx_idle</a></div><div class="ttdeci">unsigned int rx_idle</div><div class="ttdoc">Idle flag. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00094">ethernet.h:94</a></div></div>
<div class="ttc" id="structec__master_html_af339cc3b68bceb8ce25b02f4d8b5891b"><div class="ttname"><a href="structec__master.html#af339cc3b68bceb8ce25b02f4d8b5891b">ec_master::devices</a></div><div class="ttdeci">ec_device_t devices[EC_MAX_NUM_DEVICES]</div><div class="ttdoc">EtherCAT devices. </div><div class="ttdef"><b>Definition:</b> <a href="master_8h_source.html#l00211">master.h:211</a></div></div>
<div class="ttc" id="ethernet_8c_html_a66606d2d064e12129cc3a99c7e84fa74"><div class="ttname"><a href="ethernet_8c.html#a66606d2d064e12129cc3a99c7e84fa74">ec_eoedev_stats</a></div><div class="ttdeci">struct net_device_stats * ec_eoedev_stats(struct net_device *)</div><div class="ttdoc">Gets statistics about the virtual network device. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00860">ethernet.c:860</a></div></div>
<div class="ttc" id="ethernet_8c_html_a13b38b2204c153ade2d9c0b942cd49b1"><div class="ttname"><a href="ethernet_8c.html#a13b38b2204c153ade2d9c0b942cd49b1">ec_eoe_is_open</a></div><div class="ttdeci">int ec_eoe_is_open(const ec_eoe_t *eoe)</div><div class="ttdoc">Returns the state of the device. </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00366">ethernet.c:366</a></div></div>
<div class="ttc" id="mailbox_8c_html_af94312f9670053f23ca657e564e196f4"><div class="ttname"><a href="mailbox_8c.html#af94312f9670053f23ca657e564e196f4">ec_slave_mbox_check</a></div><div class="ttdeci">int ec_slave_mbox_check(const ec_datagram_t *datagram)</div><div class="ttdoc">Processes a mailbox state checking datagram. </div><div class="ttdef"><b>Definition:</b> <a href="mailbox_8c_source.html#l00115">mailbox.c:115</a></div></div>
<div class="ttc" id="structec__eoe_html_aa11f7b383aa09219aca3cfeffcdb55df"><div class="ttname"><a href="structec__eoe.html#aa11f7b383aa09219aca3cfeffcdb55df">ec_eoe::dev</a></div><div class="ttdeci">struct net_device * dev</div><div class="ttdoc">net_device for virtual ethernet device </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00083">ethernet.h:83</a></div></div>
<div class="ttc" id="structec__eoe_html_a3a3a486cb3359c0d528e4e4e37a6953d"><div class="ttname"><a href="structec__eoe.html#a3a3a486cb3359c0d528e4e4e37a6953d">ec_eoe::queue_datagram</a></div><div class="ttdeci">unsigned int queue_datagram</div><div class="ttdoc">the datagram is ready for queuing </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00081">ethernet.h:81</a></div></div>
<div class="ttc" id="structec__eoe_html_a3ec0e5dc97f984769403f00230e53f03"><div class="ttname"><a href="structec__eoe.html#a3ec0e5dc97f984769403f00230e53f03">ec_eoe::tx_queued_frames</a></div><div class="ttdeci">unsigned int tx_queued_frames</div><div class="ttdoc">number of frames in the queue </div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8h_source.html#l00099">ethernet.h:99</a></div></div>
<div class="ttc" id="datagram_8c_html_ac4bb8c0e9a5ac20a8d2c31f34a7fc4a9"><div class="ttname"><a href="datagram_8c.html#ac4bb8c0e9a5ac20a8d2c31f34a7fc4a9">ec_datagram_clear</a></div><div class="ttdeci">void ec_datagram_clear(ec_datagram_t *datagram)</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> <a href="datagram_8c_source.html#l00118">datagram.c:118</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_c1346cf4828efdd0d2baf0d391d01b77.html">master</a></li><li class="navelem"><a class="el" href="ethernet_8c.html">ethernet.c</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>
